package Learn194;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class SetDemo2 {
    //LinkedHashSet
    //有序 无索引 不重复
    //保证存和取的顺序一致
    //底层依然是哈希表 每个元素额外多了一个双链表的机制记录存储的顺序
    //头指针指向第一个元素 添加第二个元素时 第一个存第二个的位置 第二个存第一个的

    //TreeSet
    //可排序
    //基于红黑树的

    public static void main(String[] args) {
//        TreeSet<Student> ts=new TreeSet<>();
//        ts.add(4);
//        ts.add(5);
//        ts.add(1);
//        ts.add(3);
//        ts.add(2);

//        Iterator<Integer> it= ts.iterator();
//        while(it.hasNext()){
//            Integer next = it.next();
//            System.out.println(next);
//        }
//
//        for (Integer i : ts) {
//            System.out.println(i);
//        }
//        ts.forEach(s-> System.out.println(s));

//        Student s1=new Student("zhansgan",23);
//        Student s2=new Student("lisi",24);
//        Student s3=new Student("wangwu",25);
//
//        ts.add(s1);
//        ts.add(s3);
//        ts.add(s2);
//        System.out.println(ts);

//        TreeSet<String> ts=new TreeSet<>(new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//
//                int i=o1.length()-o2.length();
//                return i==0?o1.compareTo(o2):i;
//            }
//        });
//        ts.add("ab");
//        ts.add("c");
//        ts.add("df");
//        ts.add("qwer");
//
//
//        System.out.println(ts);

        //1.在JavaBean中重写Comparable接口 指定规则 默认使用第一种
        //2.自定义Comparator对象 当不想用String已经写好的比较规则的时候使用这个

        //同时存在以方式二为准

        TreeSet<Student> tree = new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                double sum1 = o1.getYuWen() + o1.getShuXue() + o1.getEnglish();
                double sum2 = o2.getYuWen() + o2.getShuXue() + o2.getEnglish();

                double i = sum1 - sum2;
                i = i == 0 ? o1.getYuWen() - o2.getYuWen() : i;
                i = i == 0 ? o1.getShuXue() - o2.getShuXue() : i;
//                i = i == 0 ? o1.getEnglish() - o2.getEnglish() : i;
                i = i == 0 ? o1.getAge() - o2.getAge() : i;
                i = i == 0 ? o1.getName().compareTo(o2.getName()) : i;
                return (int)i;
            }
        });


    }


}
